iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 10
0

ActionFilter(動作過濾器類型)

分為以下類型的Interface可以實作

  • IAuthenticationFilter驗證過濾
  • IAuthorizationFilter授權過濾
  • IActionFilter動作過濾
  • IResultFilter結果過濾
  • IExceptionFilter例外過濾

IActionFilter

  • OnActionExecuting – 在執行Action之前執行
  • OnActionExecuted – 在執行Action之後執行
  • OnResultExecuting – 在執行Action Result之前執行
  • OnResultExecuted – 在執行Action Result之後執行
    假如要有些商業邏輯要在進入Action之前做判斷我們就可以透過Action Filter去做過篩的機制。
    Step1: 首先建立一個資料夾名為ActionFilter
    Step2: 建立一個Class的檔案,命名規則通常會在結尾加Attribute的字樣,我們可以從預設有的ActionFilter看到這個共通點
    [HandleError]
    http://ithelp.ithome.com.tw/upload/images/20161225/20103808TqbyVGPwE8.jpg
    [Authorize]
    http://ithelp.ithome.com.tw/upload/images/20161225/201038084nE7U3drBa.jpg

Step3 接著我們建立的ActionFilter必須實作繼承ActionFilterAttribut

Step4 override四個方法
http://ithelp.ithome.com.tw/upload/images/20161225/20103808m2aYgUCbKV.jpg
並用ViewData和中斷點來觀察讀取的順序可以發現,讀取的順序為:
OnActionExecuting

Action Method

OnActionExecuted

OnResultExecuting

OnResultExecuted
那這東西能做什麼變化呢?假設我們需要再登入會員前做一些設定或是條件篩選,或者登入會員後,可以透過ActionExecuted來作一些細節的調整等等。

其他還有像一些常看到的Action Filter

  • [OutputCache]:可設定瀏覽器快取的相關設定。
  • [ChildActionOnly]:不可由外部URL 或是 RedirectToAction連結,只允許透過Html.RenderAction執行
  • [AllowAnonymous]:不可由外部URL 或是 RedirectToAction
  • [ValidateAntiForgeryToken]:用以防止CSRF攻擊,使用時除了必須在Action套用此屬性之外,在View頁面的 Form表單中,必須在Sumbit之前插入 @Html.AntiForgeryTolen()
  • [HandleError]:若沒特別指定錯誤事件和指定的View,預設會將頁面導向預設的 /View/Shared/Error.cshtml

上一篇
Day9_Controller傳資料給View的方法(ViewData、ViewBag、TempData)
下一篇
Day11_View之PartialView(Partial、RenderPartial、Action)
系列文
從Asp.Net MVC5的起跑點認識現代網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言